fread_string(FILE *fd)
{
int len = fread_integer(fd);
- char *val = xmalloc(len+1);
+ char *val;
+
+ if (len == 0) return NULL;
+
+ val = xmalloc(len+1);
fread(val, 1, len, fd);
while (len != 0 && val[len-1] == ' ')
len--;
return val;
}
+static void
+fread_string_discard(FILE *fd)
+{
+ char *temp = fread_string(fd);
+ if (temp != NULL) {
+ xfree(temp);
+ }
+}
+
static char *
fread_fixedstring(FILE *fd, int len)
{
fatal(MYNAME ": Invalid file format\n");
if (version != 211)
fatal(MYNAME ": Invalid format version\n");
- free(name);
+ xfree(name);
/* Header */
fread_discard(fd, 15);
im_count = fread_long(fd);
ts_count = fread_long(fd);
fread_discard(fd, 28);
- fread_string(fd);
- fread_string(fd);
- fread_string(fd);
- fread_string(fd);
+ fread_string_discard(fd);
+ fread_string_discard(fd);
+ fread_string_discard(fd);
+ fread_string_discard(fd);
/* User Grid and Datum */
fread_discard(fd, 34);
/* Image information */
for (i = 0; i != im_count; i++) {
- fread_string(fd);
- fread_string(fd);
+ fread_string_discard(fd);
+ fread_string_discard(fd);
fread_discard(fd, 30);
}
if (wp_count) {
for (i = 0; i != ws_count; i++) {
fread_discard(fd, 4);
- fread_string(fd);
+ fread_string_discard(fd);
fread_discard(fd, 24);
}
}
route_add_head(rte_head);
}
else {
- free(route_name);
+ xfree(route_name);
}
route_add_wpt(rte_head, wpt);
}